import BaseObject from "../../移动商城改/base/baseObject.js";

export default class ProductModel extends BaseObject {

    /**
     * @description 商品详情构造函数
     * @public
     * @constructor
     * @param props {object} 配置对象
     */
    constructor(props) {
        super(props)
    }

    /**
     * @description 实例化 商品模型
     * @public
     * @static
     * @param props {object} 配置对象
     * @returns {ProductModel|*} 商品对象
     */
    static instance(props = {}) {

        let instance = new ProductModel(props);

        instance.init(props);

        return instance;
    }

    //========================== 属性定义 ==========================

    /**
     * @description 获取 商品id
     * @property
     * @protected
     * @return {number} 商品id
     */
    get productId() {
        return this.getValue('productId');
    }

    /**
     * @description 设置 商品id
     * @property
     * @protected
     * @param value {number} id
     */
    set productId(value) {
        this.setValue('productId', value);
    }

    /**
     * @description 获取 商品名称
     * @property
     * @protected
     * @return {string} 商品名称
     */
    get productName() {
        return this.getValue('productName');
    }

    /**
     * @description 设置 商品名称
     * @property
     * @protected
     * @param value {*} 商品名称
     */
    set productName(value) {
        this.setValue('productName', value);
    }

    /**
     * @description 获取 商品价格
     * @property
     * @protected
     * @return {number} 商品价格
     */
    get price() {
        return this.getValue('price');
    }

    /**
     * @description 设置 商品价格
     * @property
     * @protected
     * @param value {number}
     */
    set price(value) {
        this.setValue('price', value);
    }

    /**
     * @description 获取 商品描述
     * @property
     * @protected
     * @return {string} 商品描述
     */
    get description() {
        return this.getValue('description');
    }

    /**
     * @description 设置 商品描述
     * @property
     * @protected
     * @param value {string}
     */
    set description(value) {
        this.setValue('description', value);
    }

    /**
     * @description 获取 商品库存
     * @property
     * @protected
     * @return {number} 商品库存
     */
    get stock() {
        return this.getValue('stock');
    }

    /**
     * @description 设置 商品库存
     * @property
     * @protected
     * @param value {number} 商品库存
     */
    set stock(value) {
        this.setValue('stock', value);
    }

    //========================== 接口方法 ==========================

    /**
     * @description 获取商品id
     * @public
     * @return {number} 商品id
     */
    getProductId() {
        return this.productId;
    }

    /**
     * @description 设置商品id
     * @public
     * @param value {number} 商品id
     */
    setProductId(value) {
        this.productId = value
    }

    /**
     * @description 获取商品名称
     * @public
     * @return {string} 商品名称
     */
    getProductName() {
        return this.productName
    }

    /**
     * @description 设置商品名称
     * @public
     * @param value {string} 商品名称
     */
    setProductName(value) {
        this.productName = value;
    }

    /**
     * @description 获取价格
     * @public
     * @return {number} 商品价格
     */
    getPrice() {
        return this.price;
    }

    /**
     * @description 设置商品价格
     * @public
     * @param value {number} 商品价格
     */
    setPrice(value) {
        this.price = value
    }

    /**
     * @description 获取商品描述
     * @public
     * @return {string} 商品描述
     */
    getDescription() {
        return this.description;
    }

    /**
     * @description 设置商品描述
     * @public
     * @param value {string} 商品描述
     */
    setDescription(value) {
        this.description = value
    }

    /**
     * @description 获取商品库存
     * @public
     * @return {number} 商品库存
     */
    getStock() {
        return this.stock
    }

    /**
     * @description 设置商品库存
     * @public
     * @param value {number} 商品库存
     */
    setStock(value) {
        this.stock = value
    }

    //========================== 创建方法 ==========================

    /**
     * @description 重载方法
     * @protected
     * @override
     */
    init(props) {
        super.init(props);
    }
}


